/*
 * DirectResourceStrategy.h
 *
 *  Created on: 03/10/2009
 *      Author: nik0l4z
 */

#ifndef DIRECTRESOURCESTRATEGY_H_
#define DIRECTRESOURCESTRATEGY_H_

#include "ResourceStrategy.h"
//#include "Almacenamiento.h"

class DirectResourceStrategy : public ResourceStrategy{

	private: Almacenamiento *buffer;
	private: Almacenamiento *disco;

	public:DirectResourceStrategy();
	public:DirectResourceStrategy(Almacenamiento *buffer,Almacenamiento *disco);
	public: virtual ~DirectResourceStrategy();
	public: virtual void saludar();

	/**
	 * Este metodo es el que graba finalmente en el Almacenamiento
	 * Para que la escritura sea directa, el Almacenamiento instanciado debe ser Archivo Binario/Texto y Buffer
	 * En el caso de que el Almacenamiento sea en Archivo Binario y Buffer, este metodo elimina si existe el dato en el buffer,
	 * para evitar duplicados. Luego escribe en la posicion recibida por parametro en archivo.
	 * En el caso de que el Almacenamiento sea Archivo de Texto y Buffer, este metodo elimina si existe el dato en el buffer,
	 * para evitar duplicados. Luego escribe en la posicion recibida por parametro en archivo. (si la misma es -1, significa que
	 * debe escribirse al final del archivo, caso en el cual, el metodo devuelve la posicion donde fue insertado el texto)
	 * De lo contrario devuelve 0.
	 */
	public: virtual int Save(string& dato, int posicionArchivo);

	public: virtual void Update(string& dato, int posicionArchivo);

	public: virtual void Delete(int posicionArchivo);

	public: virtual string GetData(int posicionArchivo);

	/**
	 * Este metodo devuelve no contiene logica ya que en el caso de la escritura directa, el dato se persiste cuando se graba en buffer
	 */
	public: virtual void persistOldData();

};

#endif /* DIRECTRESOURCESTRATEGY_H_ */
